/** 
 * glup的入口文件
*/

// exports.foo = done => {
//     console.log('foo task');

//     done() // 标识任务完成
// }


// exports.default = done => {
//     console.log('default task');
//     done()
// }

// const gulp = require('gulp')
// // 4.0以前使用的方式
// gulp.task('bar', done => {
//     console.log('bar task');
//     done()
// })

/** 
 * 组合任务
*/
// const { series, parallel } = require('gulp')

// const task1 = done => {
//     setTimeout(() => {
//         console.log('task1 run');
//         done()
//     }, 1000);
// }
// const task2 = done => {
//     setTimeout(() => {
//         console.log('task2 run');
//         done()
//     }, 1000);
// }

// const task3 = done => {
//     setTimeout(() => {
//         console.log('task3 run');
//         done()
//     }, 1000);
// }

// // 串行任务  编译
// exports.foo = series(task1, task2, task3) 
// // 并行任务 编辑css和js这类互不干扰的任务
// exports.bar = parallel(task1, task2, task3)

/** 
 * 异步任务
 * 1、通过回调方式
 * 2、通过stream方式
*/

// exports.callback = done => {
//     console.log('callback run');
//     done()
// }

// exports.callback_error = done => {
//     console.log('callback error');
//     done(new Error('task failed'))
// }

// exports.promise = () => {
//     console.log('promise run');
//     return Promise.resolve()
// }

// exports.promise_error = () => {
//     console.log('promise run');
//     return Promise.reject(new Error('task failed'))
// }

// const timeout = time => {
//     return new Promise(resolve => {
//         setTimeout(resolve, time)
//     })
// }

// exports.async = async() => {
//     await timeout(1000)
//     console.log('async run');
// }

// const fs = require('fs')
// exports.stream = () => {
//     const readStream = fs.createReadStream('package.json')
//     const writeStream = fs.createWriteStream('temp.txt')
//     readStream.pipe(writeStream)
//     return readStream
// }


// exports.stream = done => {
//     const readStream = fs.createReadStream('package.json')
//     const writeStream = fs.createWriteStream('temp2.txt')
//     readStream.pipe(writeStream)
//     readStream.on('end', () => {
//         done()
//     })
// }

/** 
 * 工作原理
*/
// const fs = require('fs')
// const { encode } = require('punycode')
// const { Transform } = require('stream')
// exports.default = () => {
//     // 文件读取
//     const read = fs.createReadStream('normalize.css')
//     // 文件写入
//     const write = fs.createWriteStream('normalize.min.css')

//     // 文件转换流
//     const transform = new Transform({
//         transform: (chunk, encodeing, callback) => {
//             const input = chunk.toString()
//             const output = input.replace(/\s+/g, '').replace(/\/\*.+?\*\//g, '')
//             callback(null, output)
//         }
//     })

//     // 把读取出来的文件流导出写入
//     read
//     .pipe(transform) // 转换
//     .pipe(write) // 写入
//     return read
// }

/**s
 * 文件操作API+ 插件使用
 */
// const { src, dest } = require('gulp')
// const cleanCss = require('gulp-clean-css') // 压缩css插件
// const rename = require('gulp-rename') // 重命名文件

//  exports.default = () => {
//     return src('src/*.css')
//         .pipe(cleanCss())
//         .pipe(rename({ extname: '.min.css'}))
//         .pipe(dest('dist'))

//  }

/** 
 * 自动化构建案例
*/

